/**
 * 
 */
package edu.acatlan.unam.client.ui;

//Librerías de la clase
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;

//Librerías del proyecto
import edu.acatlan.unam.client.ui.controlador.CDisegnador;
import edu.acatlan.unam.client.ui.controlador.editorTabla.CEditorTabla;
import edu.acatlan.unam.client.ui.controlador.editorTabla.IEditorTabla;
import edu.acatlan.unam.shared.bdoo.TTabla;

/**
 * @author jacobo
 * 
 * Esta clase agrupa el visor de la tabla y el formulario
 * que la edita.
 */
public class EditorTabla extends VerticalPanel implements IEditorTabla, ChangeHandler {
	//Propiedades de la clase
	private TextBox txtNomTabla;
	private TablaColumnas tablaColumnas;
	private CEditorTabla controlador;
	
	/**
	 * Constructor de la clase
	 */
	public EditorTabla() {
		controlador = new CEditorTabla();
		controlador.vincular(this);
		
		setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
		setSpacing(3);
		
		HorizontalPanel horizontalPanel = new HorizontalPanel();
		horizontalPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
		horizontalPanel.setSpacing(3);
		horizontalPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		add(horizontalPanel);
		
		Label lblTabla = new Label("Tabla:");
		horizontalPanel.add(lblTabla);
		
		txtNomTabla = new TextBox();
		txtNomTabla.addChangeHandler(this);
		horizontalPanel.add(txtNomTabla);
		
		tablaColumnas = new TablaColumnas(controlador);
		add(tablaColumnas);
	}

	/**
	 * @param controlador es el controlador del panel principal
	 */
	public void vincularControladores(CDisegnador controlador) {
		this.controlador.vincular(controlador);
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.IEditorTabla#mostrarTabla(edu.acatlan.unam.shared.bdoo.TTabla)
	 */
	public void mostrarTabla(TTabla t) {
		this.txtNomTabla.setText(t.getNombreTb());
		tablaColumnas.setColumnas();
	}
	
	/**
	 * @param event es el evento que dispara la acción
	 */
	public void onChange(ChangeEvent event) {
		controlador.cambiarNombreTabla(this.txtNomTabla.getText());
		event.getNativeEvent().preventDefault();
		event.getNativeEvent().stopPropagation();
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.IEditorTabla#enfocarNombre()
	 */
	public void enfocarNombre() {
		this.txtNomTabla.setFocus(true);
		this.txtNomTabla.selectAll();
	}
}
